Option Explicit
Sub Combinar()
    Dim shtHoja1 As Worksheet
    
    'Declaramos las variables que seria las columnas del excel

    
    Dim strNombre As String
    Dim strDocumento As String
    Dim strFechaTaller As String
    Dim strFechaVigencia As Date
    Dim strNumeracion As String
    Dim filaInicial As Long
    
    'Creamos nuestras variables de tipo objeto
'objppt: Prepara archivo ppt, objpres crea un nuevo archivo ppt, objsld crea las diapositivas, objshp alamcena los objetos de tipo cuadro de texto'
    
    Dim objPPT As Object
    Dim objPres As Object
    Dim objSld As Object
    Dim objShp As Object
    
    'Llamamos la hoja en donde Vamos a obtener los datos y se lo asignamos al objeto shtHoja1
    
    Set shtHoja1 = Worksheets("Hoja1")
    
    Set objPPT = CreateObject("Powerpoint.Application")
    objPPT.Visible = True
    
    'Buscamos la plantilla que en este caso se llama diplomas la cual se encuetra en el mismo directorio que el archivo de excel'
    'y se lo asignamos al objeto objPres
    
    Set objPres = objPPT.presentations.Open(ThisWorkbook.Path & "\Constancias.pptx")
    
    
'una vez asignada la plantilla constancias al objeto objPres guardamos el objeto con el nombre de Combinados.pptx

    
    objPres.SaveAs ThisWorkbook.Path & "\combinados.pptx"
    
    'Esta variable nos indicara donde iniciar a obtener los datos, en este caso a partir de la fila 2'

    
    filaInicial = 2
    
    'Creamos un ciclo , la instrucion es que, mientras en la variable filainicial y columna 1 sea diferente (<>) a campo vacio hacer los siguiente'

    
    Do While shtHoja1.Cells(filaInicial, 1) <> ""
    
    'obtenemos el dato de la filainicial, columna 1 2 y 3 y se lo asignamos a la variable strNombre taller y tallerista'
        
    
        strNombre = shtHoja1.Cells(filaInicial, 1)
    
        strDocumento = shtHoja1.Cells(filaInicial, 2)
    
        strFechaTaller = shtHoja1.Cells(filaInicial, 3)
        
        strFechaVigencia = shtHoja1.Cells(filaInicial, 4)
        
        strNumeracion = shtHoja1.Cells(filaInicial, 5)
        
        'del objeto objPres (Combinados.pptx) duplicamos la primera diapositiva o slide y se lo asignamos al objSld
    
        Set objSld = objPres.slides(1).Duplicate
        
        'ahora hara un recorrido de las formas que contenga la diapositiva, supongo que los cuadros de texto y demas tipos de objetos que se puedan insertar

    
        For Each objShp In objSld.Shapes
        
        'si la forma es un cuadro de texto
          
            If objShp.HasTextFrame Then
            
            'si la forma cuadro de texto tiene texto'
    
                If objShp.TextFrame.HasText Then
                
                'reemplazar el texto"<Nombre>" del cuadro de texto por lo que contiene la variable strNombre y asi sucesivamente
    
                    objShp.TextFrame.TextRange.Replace "<nombre>", strNombre
                    objShp.TextFrame.TextRange.Replace "<documento>", strDocumento
                    objShp.TextFrame.TextRange.Replace "<fechataller>", strFechaTaller
                    objShp.TextFrame.TextRange.Replace "<vigencia>", strFechaVigencia
                    objShp.TextFrame.TextRange.Replace "<numeracion>", strNumeracion
                End If
            End If
        Next
    
    'con esta instruccion nos aseguramos de pasar a la siguiente fila de la hoja de excel'
    
        filaInicial = filaInicial + 1
    Loop
    
    'ahora borramos la diapositiva que nos sirvio como plantilla'
    
    objPres.slides(1).Delete
    
    'guardamos los cambio que se hicieron en la diapositiva "Combinados.pptx'
    
    objPres.Save
    
        
    objPres.Close
    
End Sub
